#pragma once
#include <iostream>
#include <cmath>

struct Vector
{
	static double VectorProduct(const Vector& v1, const Vector& v2)
	{
		return v1._x * v2._x + v1._y * v2._y;
	}


	// 获得两向量夹角的余弦值
	static double IncludedAngle(const Vector& v1, const Vector& v2)
	{
		return Vector::VectorProduct(v1, v2) / (v1.Norm() * v2.Norm());
	}

	static double DotProduct(const Vector& v1, const Vector& v2) {
		return v1._x * v2._x + v1._y * v2._y;
	}

	Vector(double x, double y) :_x(x), _y(y) {}
	Vector(int x, int y) :_x(x), _y(y) {}

	// 获取单位法向量
	Vector GetNormalVector()
	{
		double len = sqrt(_y * _y + _x * _x);
		return { -_y / len, _x / len };
	}

	// 获取向量的模
	double Norm() const 
	{
		return sqrt(_x * _x + _y * _y);
	}

	~Vector(){}
	double _x, _y;
};